home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.asm;
-
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.RuntimeConstants;
- import sun.tools.java.Type;
- import sun.tools.tree.StringExpression;
-
- public final class ConstantPool implements RuntimeConstants {
- Hashtable hash = new Hashtable(101);
-
- public int index(Object var1) {
- return ((ConstantPoolData)this.hash.get(var1)).index;
- }
-
- public void put(Object var1) {
- Object var2 = (ConstantPoolData)this.hash.get(var1);
- if (var2 == null) {
- if (var1 instanceof String) {
- var2 = new StringConstantData(this, (String)var1);
- } else if (var1 instanceof StringExpression) {
- var2 = new StringExpressionConstantData(this, (StringExpression)var1);
- } else if (var1 instanceof ClassDeclaration) {
- var2 = new ClassConstantData(this, (ClassDeclaration)var1);
- } else if (var1 instanceof Type) {
- var2 = new ClassConstantData(this, (Type)var1);
- } else if (var1 instanceof FieldDefinition) {
- var2 = new FieldConstantData(this, (FieldDefinition)var1);
- } else if (var1 instanceof NameAndTypeData) {
- var2 = new NameAndTypeConstantData(this, (NameAndTypeData)var1);
- } else if (var1 instanceof Number) {
- var2 = new NumberConstantData(this, (Number)var1);
- }
-
- this.hash.put(var1, var2);
- }
-
- }
-
- public void write(Environment var1, DataOutputStream var2) throws IOException {
- ConstantPoolData[] var3 = new ConstantPoolData[this.hash.size()];
- int var4 = 1;
- int var5 = 0;
-
- for(int var6 = 0; var6 < 5; ++var6) {
- Enumeration var7 = this.hash.elements();
-
- while(var7.hasMoreElements()) {
- ConstantPoolData var8 = (ConstantPoolData)var7.nextElement();
- if (var8.order() == var6) {
- var3[var5++] = var8;
- var8.index = var4;
- var4 += var8.width();
- }
- }
- }
-
- var2.writeShort(var4);
-
- for(int var9 = 0; var9 < var5; ++var9) {
- var3[var9].write(var1, var2, this);
- }
-
- }
- }
-